package hashtable

// hash table 散列表
//
// 其是基于数组的
//
// 一个好的、工业级的散列表需要有以下特点：
// 1.查询、插入、删除的效率较高
// 2.内存占用合理，不能浪费过多内存空间
// 3.性能稳定，极端情况下，散列表性能也不会退化到无法接受的地步
//
// 散列表实现关注点：
// 1.设计合适的散列函数
// 2.装载因子阈值和动态扩容策略
// 3.合适的应对散列冲突的方案
//
// 其中：
//
// - 散列函数：
// 需要设计良好，减少散列冲突的可能性。但也不能过于复杂，降低计算效率
//
// - 装载因子和动态扩容：
// 在装载因子过高时，更有可能造成散列冲突，造成查询等操作效率下降，
// 需要针对对应的散列冲突方案设计对应的动态扩容机制以及配置合适的装载因子
//
// - 散列冲突应对方案：
// 1.开放寻址法
// 线性探测 linear probing
// 二次（二次方）探测 quadratic probing
// 双重散列 double hash
//
// 2.链表法
// 针对链表过长的情况，还可以使用红黑树、跳表等进行优化
// 在数据少的情况，再退化会链表结构.
